from zhipuai import ZhipuAI

from logger.log_config import logger


# from prompts.init_interview import JD_INO_EXTRACT
# from utils.parse_utils import parse_markdown_json_content


def chat(messages: list[dict]):
    client = ZhipuAI(api_key="26ff506e4e8ef9b787251f1914532aaa.50TvJVih12un2iiw")  # 请填写您自己的APIKey
    response = client.chat.completions.create(
        model="glm-4-plus",  # 请填写您要调用的模型名称
        messages=messages,
        temperature=0.01,
        top_p=0.1
    )
    logger.info(f'模型回答:{response.choices[0].message.content}')
    return response.choices[0].message.content


def stream_chat(messages: list[dict]):
    client = ZhipuAI(api_key="26ff506e4e8ef9b787251f1914532aaa.50TvJVih12un2iiw")  # 请填写您自己的APIKey
    response = client.chat.completions.create(model="glm-4-plus", messages=messages, stream=True, temperature=0.01,
                                              top_p=0.1)
    for chunk in response:
        logger.info(chunk.model_dump_json(exclude_unset=False))
        # 将 chunk 转换为 JSON 并加上 `data:` 前缀
        yield chunk


def embeddings_cal(texts: list[str]):
    client = ZhipuAI(api_key="26ff506e4e8ef9b787251f1914532aaa.50TvJVih12un2iiw")
    response = client.embeddings.create(
        model="embedding-3",  # 填写需要调用的模型编码
        input=texts,
    )
    return response.data

# system_content = """你是一个专业的面试官，职责是针对候选人进行结构化面试，并根据实时对话动态调整面试进程。你的面试目标是考察候选人是否符合目标岗位的要求。
#
# 【岗位信息】：
# {岗位信息}
#
# 【候选人简历摘要】：
# {候选人简历摘要}
#
# 【参考问题列表】：
# {参考问题列表}
#
# 【你的职责】：
# 1. 根据当前对话历史，分析候选人的回答质量，动态调整面试进程。
# 2. 如果候选人的回答不完整、模糊或需要进一步挖掘，生成有针对性的追问。
# 3. 如果回答充分且符合岗位要求，切换到参考问题中的下一个问题。
# 4. 如果所有问题完成或已达到面试目标，主动结束面试。
#
# 【决策时须参考以下因素】：
# 1. **回答完整性**：候选人是否充分回答了问题，具体细节是否明确。
# 2. **岗位相关性**：回答是否展示了与岗位职责和要求高度相关的技能或经验。
# 3. **逻辑与清晰度**：回答是否清晰、条理且具有说服力。
#
# 【输出要求】：
# 1. 如果需要追问：返回[追问]+ 补充问题。
# 2. 如果需要切换到下一个问题：返回 [下一问题]+具体的问题。
# 3. 如果需要直接结束面试：返回 [结束面试]。
#
#
#
# 请根据上述内容和当前对话历史灵活判断面试的下一步动作。"""

# system_case = """你是一个专业的面试官，职责是针对候选人进行结构化面试，并根据实时对话动态调整面试进程。你的面试目标是考察候选人是否符合目标岗位的要求。
#
# 【岗位信息】：
# 岗位名称：机器学习工程师
# 岗位职责：研究和开发机器学习模型，优化大规模数据处理算法，为客户提供精准决策支持。
# 岗位要求：
# - 熟悉主流深度学习框架（如PyTorch、TensorFlow等）。
# - 有大规模分布式算法设计经验。
# - 具备扎实的数学基础（如线性代数、概率论）和编程能力。
#
# 【候选人简历摘要】：
# 教育背景：拥有计算机科学硕士学历，精通深度学习和数据科学技术。
# 工作经验：在某大型互联网公司担任高级算法工程师三年，负责推荐系统和预测建模项目，熟悉分布式机器学习框架（如Horovod和Ray）。
# 主要技能：
# - 熟练掌握Python、PyTorch、TensorFlow和Scikit-learn。
# - 有构建和优化深度学习模型的经验，包括CNN、RNN和Transformer模型。
# - 能够处理非结构化数据（如文本、图像和音频）。
#
# 【参考问题列表】：
# 1. 请描述一个你主导或参与过的机器学习项目，该项目对业务产生了什么价值？
# 2. 在处理海量数据时，你是如何优化模型训练效率的？
# 3. 请分享一次你解决技术难题的经历，以及具体是如何解决的？
# 4. 你如何在团队协作中处理意见分歧？请举例说明。
# 5. 面对时间紧迫的情况下，如何平衡模型精度与实际应用需求？
#
# 【你的职责】：
# 1. 根据当前对话历史，分析候选人的回答质量，动态调整面试进程。
# 2. 如果候选人的回答不完整、模糊或需要进一步挖掘，生成有针对性的追问。
# 3. 如果回答充分且符合岗位要求，切换到参考问题中的下一个问题。
# 4. 如果所有问题完成或已达到面试目标，主动结束面试。
#
# 【输出要求】：
# 1. 如果需要追问：返回[追问]+ 补充问题。
# 2. 如果需要切换到下一个问题：返回 [下一问题]+具体问题。
# 3. 如果需要直接结束面试：返回 [结束面试]。
#
# 【决策时须参考以下因素】：
# 1. **回答完整性**：候选人是否充分回答了问题，具体细节是否明确。
# 2. **岗位相关性**：回答是否展示了与岗位职责和要求高度相关的技能或经验。
# 3. **逻辑与清晰度**：回答是否清晰、条理且具有说服力。
#
# 请根据上述内容和当前对话历史灵活判断面试的下一步动作。"""
#
# # 用户信息作为第一条给到模型，全程交给模型来走流程
# # --》第一步
# messages = [{"role": "system", "content": system_case},
#             {"role": "user", "content": "请描述一个你主导或参与过的机器学习项目，该项目对业务产生了什么价值？"},
#
# ]
# chat(messages)

# --》


# def parse_job_description(job_description):
#     prompt = JD_INO_EXTRACT.format(job_description=job_description)
#     response = chat([{"role": "user", "content": prompt}])
#     return parse_markdown_json_content(response)

# case1="我们是一家国内领先的互联网教育公司——学霸云教育，专注于在线学习服务。现招聘课程运营专员，工作地点：北京市朝阳区望京SOHO。岗位职责：负责维护线上课程内容，包括视频编辑与课程资料审核；协调内部团队与外部合作教师，提高课程质量；策划各类线上教育推广活动。任职要求：本科及以上学历，教育学相关专业优先；熟练使用Excel，并有一定的文案策划能力。薪资福利：6K-10K/月，全额五险一金，年终奖+带薪年假。"
# case2="阿里巴巴集团招聘高级Java开发工程师，工作地点为杭州西溪园区。岗位职责包括：负责分布式系统的架构设计与核心代码开发，支持高并发、高稳定性场景；协助团队解决技术难题，提升平台服务性能与稳定性。任职要求：精通Java语言，熟悉Spring Boot、分布式系统设计，具备5年以上开发经验。薪资范围：30K-50K/月，提供住房补贴与年度奖励。"
# case3="华为云服务部门正在招募高级算法工程师，底层团队岗位，需深入参与云计算核心模块的算法设计与优化。工作内容：研究最前沿的深度学习算法，并与AI团队协作，用于优化计算资源调度；开发高效能的分布式优化算法。任职要求：硕士及以上学历，计算机或数学专业优先；熟悉PyTorch/TensorFlow等深度学习框架；对数学建模和算法优化有独到见解。薪资待遇：月薪45K起+科研奖金，免费通勤班车及企业内健身房。工作地点：深圳坂田基地。"
#
#
#
# job_description_list =[case1,case2,case3]
# for jd in job_description_list:
#     print(parse_job_description(job_description=jd))
